
var flagArray;

//根据指定表格每行第n个单元格的值，对第一个tbody中的行进行排序
//如果存在comparator函数则使用它，否则按字母表顺序比较
function sortRows(table, n, comparator) {
    var tbody = table.tBodies[0];
    var rows = tbody.getElementsByTagName("tr");
    rows = Array.prototype.slice.call(rows, 0);//转化为真实数组
    //基于第n个<td>元素的值对行排序
    rows.sort(function (row1, row2) {
        var cell1 = row1.getElementsByTagName("td")[n];
        var cell2 = row2.getElementsByTagName("td")[n];
        var val1 = cell1.textContent || cell1.innerText;//IE兼容
        var val2 = cell2.textContent || cell2.innerText;
        if (comparator) return comparator(val1, val2);
        var temp = flagArray[n];
        flagArray[n] *= -1;
        if (val1 < val2) return 1 * temp;
        else if (val1 > val2) return -1 * temp;
        else return 0;
    });
    for (var i = 0; i < rows.length; i++) tbody.appendChild(rows[i]);  //原先的会自动移除
}

//查找表格的<th>元素（假设只有一行），让它们可单击，以便单击该列对行排序
function makeSortTable(table) {
    var headers = table.getElementsByTagName("th");
    flagArray = new Array(headers.length);
    for(var i = 0; i < headers.length; i++) flagArray[i] = 1;
    for (var i = 0; i < headers.length; i++) {
        (function (n) { //嵌套函数来创建本地作用域
            headers[i].onclick = function () {
                sortRows(table, n);
            };
        }(i));
    }
}

window.onload = function () {
    var table = document.getElementById("table");
    makeSortTable(table);
}